﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Storage;

namespace In_Game
{
    class Inimigo
    {
        public Texture2D textura;
        public Animacao animacao;
        public Vector2 posicao;
        public Vector2 direcao;
        public EstadoInimigo estadoInimigo;
        public int HP;
        public int dano;
        public bool ativo;
        public Point posicaoRetangulo;
        public Point tamanhoRetangulo;
        public Rectangle retanguloColisao;

        public Point posicaoInicial;  // posiçao inicial da animaçao na folha
        public int framePorSegundo;   // quantidade de frames por segundo qua a animacao irá rodar
        public int larguraFrame;      // largura do frame
        public int alturaFrame;       // altura do frame
        public int quantidadeFrame;   // quantidade de frames que a animaçao possui

        public Vector2 posicaoHeroi;
        public Vector2 posicaoHeroi2;
        public int heroi = 0;


        public Inimigo(Texture2D textura,  Vector2 posicao, EstadoInimigo estadoInimigo, int heroi)
        {
            this.textura = textura;
            this.heroi = heroi;
            this.posicao = posicao;
            posicaoRetangulo = Point.Zero;
            tamanhoRetangulo = Point.Zero;
            direcao = new Vector2(0, 0);
            HP = 100;
            ativo = true;
            dano = 10;
            this.estadoInimigo = estadoInimigo;

            posicaoInicial = Point.Zero;
            framePorSegundo = 8;
            larguraFrame = 0;
            alturaFrame = 0;
            quantidadeFrame = 0;
            posicaoHeroi = Vector2.Zero;

            animacao = new Animacao(textura, posicao, posicaoInicial, larguraFrame, alturaFrame, quantidadeFrame, framePorSegundo, Color.White, 1, true, true);

        }

        public void Update(GameTime gameTime)
        {



            animacao.Update(gameTime);

            animacao.posicao = posicao;
            posicao += direcao;

            animacao.posicaoInicial = posicaoInicial;
            animacao.framePorSegundo = framePorSegundo;
            animacao.larguraFrame = larguraFrame;
            animacao.alturaFrame = alturaFrame;
            animacao.quantidadeFrame = quantidadeFrame;

            if (ativo)
            {
                retanguloColisao = new Rectangle((int)posicao.X + posicaoRetangulo.X, (int)posicao.Y + posicaoRetangulo.Y, (int)animacao.larguraFrame + tamanhoRetangulo.X, (int)animacao.alturaFrame + tamanhoRetangulo.Y);

                switch (estadoInimigo)
                {

                    case EstadoInimigo.ESQUERDA:
                        posicaoInicial = new Point(81, 0);
                        framePorSegundo = 12;
                        larguraFrame = 81;
                        alturaFrame = 50;
                        quantidadeFrame = 2;

                        posicaoRetangulo = new Point(8, 5);
                        tamanhoRetangulo = new Point(-25, -10);

                        direcao = new Vector2(-4, 0);



                        if (heroi == 1 || heroi == 2)
                        {
                            if (posicao.X < posicaoHeroi.X)
                            {
                                estadoInimigo = EstadoInimigo.DIREITA;
                            }

                            if (posicao.X <= posicaoHeroi.X && posicao.Y > posicaoHeroi.Y)
                            {
                                estadoInimigo = EstadoInimigo.CIMA;
                            }

                            if (posicao.X <= posicaoHeroi.X && posicao.Y < posicaoHeroi.Y)
                            {
                                estadoInimigo = EstadoInimigo.BAIXO;
                            }
                        }

                        if (heroi == 3 || heroi == 4)
                        {
                            if (posicao.X < posicaoHeroi2.X)
                            {
                                estadoInimigo = EstadoInimigo.DIREITA;
                            }

                            if (posicao.X <= posicaoHeroi2.X && posicao.Y > posicaoHeroi2.Y)
                            {
                                estadoInimigo = EstadoInimigo.CIMA;
                            }

                            if (posicao.X <= posicaoHeroi2.X && posicao.Y < posicaoHeroi2.Y)
                            {
                                estadoInimigo = EstadoInimigo.BAIXO;
                            }
                        }
                        

                        break;

                    case EstadoInimigo.DIREITA:
                        posicaoInicial = new Point(81, 65);
                        larguraFrame = 81;
                        alturaFrame = 50;
                        quantidadeFrame = 2;

                        posicaoRetangulo = new Point(13, 5);
                        tamanhoRetangulo = new Point(-20, -10);

                        direcao = new Vector2(4, 0);

                        if (heroi == 1 || heroi == 2)
                        {
                            if (posicao.X > posicaoHeroi.X)
                            {
                                estadoInimigo = EstadoInimigo.ESQUERDA;
                            }

                            if (posicao.X >= posicaoHeroi.X && posicao.Y > posicaoHeroi.Y)
                            {
                                estadoInimigo = EstadoInimigo.CIMA;
                            }

                            if (posicao.X >= posicaoHeroi.X && posicao.Y < posicaoHeroi.Y)
                            {
                                estadoInimigo = EstadoInimigo.BAIXO;
                            }
                        }

                        if (heroi == 3 || heroi == 4)
                        {
                            if (posicao.X > posicaoHeroi2.X)
                            {
                                estadoInimigo = EstadoInimigo.ESQUERDA;
                            }

                            if (posicao.X >= posicaoHeroi2.X && posicao.Y > posicaoHeroi2.Y)
                            {
                                estadoInimigo = EstadoInimigo.CIMA;
                            }

                            if (posicao.X >= posicaoHeroi2.X && posicao.Y < posicaoHeroi2.Y)
                            {
                                estadoInimigo = EstadoInimigo.BAIXO;
                            }
                        }
                        
                        break;

                    case EstadoInimigo.CIMA:
                        posicaoInicial = new Point(81, 198);
                        larguraFrame = 81;
                        alturaFrame = 55;
                        quantidadeFrame = 2;

                        direcao = new Vector2(0, -4);

                        posicaoRetangulo = new Point(27, 13);
                        tamanhoRetangulo = new Point(-56, -22);

                        if (heroi == 1 || heroi == 2)
                        {
                            if (posicao.Y <= posicaoHeroi.Y)
                            {
                                if (posicao.X > posicaoHeroi.X)
                                {
                                    estadoInimigo = EstadoInimigo.ESQUERDA;
                                }

                                if (posicao.X < posicaoHeroi.X)
                                {
                                    estadoInimigo = EstadoInimigo.DIREITA;
                                }
                            }
                        }

                        if (heroi == 3 || heroi == 4)
                        {
                            if (posicao.Y <= posicaoHeroi2.Y)
                            {
                                if (posicao.X > posicaoHeroi2.X)
                                {
                                    estadoInimigo = EstadoInimigo.ESQUERDA;
                                }

                                if (posicao.X < posicaoHeroi2.X)
                                {
                                    estadoInimigo = EstadoInimigo.DIREITA;
                                }
                            }
                        }

                        break;

                    case EstadoInimigo.BAIXO:
                        posicaoInicial = new Point(81, 129);
                        larguraFrame = 81;
                        alturaFrame = 55;
                        quantidadeFrame = 2;

                        direcao = new Vector2(0, 4);

                        posicaoRetangulo = new Point(27, 15);
                        tamanhoRetangulo = new Point(-56, -25);

                        if (heroi == 1 || heroi == 2)
                        {
                            if (posicao.Y >= posicaoHeroi.Y)
                            {
                                if (posicao.X > posicaoHeroi.X)
                                {
                                    estadoInimigo = EstadoInimigo.ESQUERDA;
                                }

                                if (posicao.X < posicaoHeroi.X)
                                {
                                    estadoInimigo = EstadoInimigo.DIREITA;
                                }
                            }
                        }

                        if (heroi == 3 || heroi == 4)
                        {
                            if (posicao.Y >= posicaoHeroi2.Y)
                            {
                                if (posicao.X > posicaoHeroi2.X)
                                {
                                    estadoInimigo = EstadoInimigo.ESQUERDA;
                                }

                                if (posicao.X < posicaoHeroi2.X)
                                {
                                    estadoInimigo = EstadoInimigo.DIREITA;
                                }
                            }
                        }
                        
                        break;

                }
            }



            if (HP <= 0)
            {
                ativo = false;
                retanguloColisao = Rectangle.Empty;
            }

            if (ativo == false)
            {
                retanguloColisao = Rectangle.Empty;
            }
        }

        public void Draw(SpriteBatch spritBatch)
        {
            if (ativo)
            {
                animacao.Draw(spritBatch);
            }
        }
    }
}
